package com.jyx.xml;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * dom4jTest
 * @author jyx
 * @date 2016年8月16日下午11:46:19
 * @description Dom4jTest
 * @email jyxsuper@163.com
 */
public class Dom4jTest {
	private static Logger logger = LoggerFactory.getLogger(Dom4jTest.class);
	
	public static void main(String[] args) {
		try {
			
			SAXReader sax=new SAXReader();//创建一个SAXReader对象  
		    Document document=sax.read(new File("resource/user.xml"));;//获取document对象,如果文档无节点，则会抛出Exception提前结束  
		    Element node=document.getRootElement();//获取根节点
		    getNodes(node);
	    	//SAXReader reader = new SAXReader();
			//Document document = reader.read(new File("resource/user.xml"));
			//Element root = document.getRootElement();
			//DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			//document db.parse(new File("resource/user.xml"));
		    
			/*for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
		       Element element = (Element) i.next();
		       p(element.getName()+"-------");
			}*/
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("出现错误："+e.getMessage(),e);
		}
	}
	
	public static void getNodes(Element node){
		System.out.println("------------");
		System.out.println("当前节点名称："+node.getName());//当前节点名称  
	    System.out.println("当前节点的内容："+node.getTextTrim());//当前节点名称  
	    List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list  
	    for(Attribute attr:listAttr){//遍历当前节点的所有属性  
	        String name=attr.getName();//属性名称  
	        String value=attr.getValue();//属性的值  
	        System.out.println("属性名称："+name+"属性值："+value);  
	    }  
	      
	    //递归遍历当前节点所有的子节点  
	    List<Element> listElement=node.elements();//所有一级子节点的list  
	    for(Element e:listElement){//遍历所有一级子节点  
	        getNodes(e);//递归  
	    }
	}
	
	public static void p(String str){
		System.out.println(str);
	}
	
}
